// 导入swagger-jsdoc库及swagger-ui-express库
const swaggerJsdoc = require('swagger-jsdoc');
const swaggerUi = require('swagger-ui-express');

// 导入express
const express = require('express');

// 导入path
const path = require('path');

// 配置swagger文档
const swaggerOptions = {
  swaggerDefinition: {
    openapi: '3.0.0', // 使用 OpenAPI 3.0
    info: {
      title: 'API文档',
      version: '1.0.0',
      description: '课程评价系统',
    },
    components: {
      securitySchemes: {
        apiKeyAuth: { // 自定义安全方案
          type: 'apiKey',
          name: 'Authorization', // 请求头中使用的键名
          in: 'header', // 在请求头中
        },
      },
    },
    security: [
      {
        apiKeyAuth: [], // 使用 bearerAuth 进行全局认证
      },
    ],
  },
  apis: [path.join(__dirname, '../routes/*.js')], // 指定API文件
};

// 生成swagger文档
const swaggerSpec = swaggerJsdoc(swaggerOptions);

// swagger.json接口
const swaggerJSON = (req, res) => {
  res.setHeader('Content-Type', 'application/json');
  res.send(swaggerSpec);
};

// swagger安装函数
const swaggerInstall = (app) => {
  if (!app) {
    app = express();
  }

  // 开放相关接口
  app.get('/swagger.json', swaggerJSON); // 修正了路径前缺少斜杠的问题
  // 使用swaggerSpec生成swagger文档页面，并开放在指定路由
  app.use('/swagger', swaggerUi.serve, swaggerUi.setup(swaggerSpec));
};

module.exports = swaggerInstall;